To improve the quality of software applications, error reporting services have been provided by operating system vendors. These services, such as the error reporting service provided as part of the WINDOWS® operating system, collect data about applications running on the WINDOWS® operating system that experience failures. This information may be aggregated at a central point so that patterns that reveal the source of failures can be identified and used to improve the applications.
Such error reporting may be triggered by an unhandled exception. An exception indicates a problem with an application. Certain problems, such as invalid input, are anticipated by application developers and handlers for certain exceptions may be provided within an application. But, if no mechanism for handling an error is provided, the application may fail to operate or “crash.”
Error reporting may also be triggered when an application fails to respond for a period of time, such as an “application hang.” An application hang may be caused by a number of conditions, such as encountering an infinite loop in the application code, a deadlock condition, or resource starvation.
The failure may therefore trigger the operating system to perform error reporting. For example, in the case of an application generating an unhandled exception, a component of the operating system may prompt a user for permission to report crash data. If so, that component may gather data about the application that generated the exception, including the module of the application in which the crash occurred and the offset within the module corresponding to the last instruction executed before the crash occurred. In some computer environments, the error data from a variety of applications and/or from a number of computers may be transmitted to another entity for analysis, for example, by transmitting the data over the Internet to a computer server administered by a third party, which could be the provider of the application or the operating system.
Upon the detection of an application failure, it may also be useful to allow sophisticated users to debug the application exhibiting the failure. For example, after detecting an application crash, a component in the operating system may present the user with the option to launch an application debugger program on the crashed application. This has the benefit of allowing the user to analyze the cause of the error in real time.